# -*- coding: utf-8 -*-
"""
Created on Fri Jul  7 23:56:51 2017

@author: hasee
"""

# Filename: PortListner.py  
# @author: RobinTang  
# Created on 2012-9-5 1:42:05  
  
import threading  
import socket  
  
encoding = 'utf-8'  
BUFSIZE = 1024  
  
# a read thread, read data from remote  
class Reader(threading.Thread):  
    def __init__(self, client):  
        threading.Thread.__init__(self)  
        self.client = client  
          
    def run(self):  
        while True:  
            data = self.client.recv(BUFSIZE)  
            if(data):  
                string = bytes.decode(data, encoding)  
                print(string, end='')  
            else:  
                break  
        print("close:", self.client.getpeername())  
          
    def readline(self):  
        rec = self.inputs.readline()  
        if rec:  
            string = bytes.decode(rec, encoding)  
            if len(string)>2:  
                string = string[0:-2]  
            else:  
                string = ' '  
        else:  
            string = False  
        return string  
  
# a listen thread, listen remote connect  
# when a remote machine request to connect, it will create a read thread to handle  
class Listener(threading.Thread):  
    def __init__(self, port):  
        threading.Thread.__init__(self)  
        self.port = port  
        self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
        self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)  
        self.sock.bind(("0.0.0.0", port))  
        self.sock.listen(0)  
    def run(self):  
        print("listener started")  
        while True:  
            client, cltadd = self.sock.accept()  
            Reader(client).start()  
            cltadd = cltadd  
            print("accept a connect")  
  
lst  = Listener(1883)   # create a listen thread  
lst.start() # then start  